home *** CD-ROM | disk | FTP | other *** search
- Date: Mon, 6 Apr 1992 08:50:21 PDT
- From: Victor_J_Heintz.wbst128@xerox.com
-
- Received: by launchpad.paa.xerox.com (4.1/SMI-4.0) id AA03010; Mon, 6 Apr 92 11:50:14 EDT
- Apparently-To: info-mac@sumex-aim.stanford:edu:xerox
-
- I have attached a C program I wrote to convert Sun Microsystems u-law encoded
- audio files to linear sound data files. The latter files can be read by
- SoundMover ("Open any" mode) and converted to Mac snd resources. Anyone with a
- Sun Sparcstation and a microphone ought to be able to make their own Mac sounds.
- You have to remember to set the sampling rate in SoundMover to the value encoded
- in the audio file (usually, if not always, 8.0 kHz.) SoundMaster will still want
- to play them at 7.4 kHz, I think, but they sound OK.
-
- There is no Makefile. You can simply "cc" it on your Sparcstation. If someone
- incorporates this into a Mac utility (such as SoundMover, hint, hint) all I
- ask is a free copy.
-
- Please upload this to an appropriate directory.
-
- Vic Heintz
- vic:wbst128@xerox.com
-
- >------------------------------------------------------------------------------<
- /* sun_audio2mac_linear.c
- * This program was written April 6, 1992 by Victor J. Heintz
- * (vic:wbst128@xerox.com)
- *
- * Converts Sun Microsystems u-law encoded ".au" sound files to
- * linear sound data files. These files are compatible as input
- * to SoundMover with the "Open any" option.
- * Uses a look up table to translate u-law encoded sound bytes to
- * linear sound bytes as used in Macintosh snd resources.
- * The look-up table was generated by applying the audio_u2c macro
- * defined in the Sun ulaw2linear.h file to values from 0 to 255.
- * The audio file header structure was taken from the audio_filehdr.h
- * file in the Sun SOUND demo package.
- * I am distributing this freely in the hopes that someone will write
- * a Mac tool that recognizes Sun u-law format sounds ( and of course
- * let me have a free copy.)
- */
-
- #include <stdio.h>
-
- #define AU_MAGIC 0x2e736e64
- #define U_LAW 1
- #define INFO_SIZE (au_head.hdr_size - 24)
-
- static unsigned char lut_au2snd[] = {
- 2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 58, 62,
- 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
- 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
- 112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,
- 120,120,121,121,121,121,122,122,122,122,123,123,123,123,124,124,
- 124,124,124,124,125,125,125,125,125,125,125,125,126,126,126,126,
- 126,126,126,126,126,126,126,126,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,128,
- 254,249,245,241,237,233,229,225,221,217,213,209,205,201,197,193,
- 190,188,186,184,182,180,178,176,174,172,170,168,166,164,162,160,
- 159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,
- 143,142,142,141,141,140,140,139,139,138,138,137,137,136,136,135,
- 135,135,134,134,134,134,133,133,133,133,132,132,132,132,131,131,
- 131,131,131,131,130,130,130,130,130,130,130,130,129,129,129,129,
- 129,129,129,129,129,129,129,129,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
- };
-
- typedef struct {
- unsigned long magic; /* should be 0x2e736e64 = ".snd" */
- unsigned long hdr_size; /* this struct's 24 bytes + info text */
- unsigned long data_size; /* number of bytes of sound data */
- unsigned long encoding; /* usually (always?) U_LAW = 1 */
- unsigned long sample_rate; /* usually (always?) 8000 Hz */
- unsigned long channels; /* usually (always?) 1 */
- } au_hdrTYPE;
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- au_hdrTYPE au_head;
- FILE *fpIn, *fpOut;
- char info[255]; /* text immediately following header struct */
- unsigned char *sound_bytes;
- unsigned long whichByte;
-
- if (argc != 3) {
- printf("Usage: %s Sun_audio_file Mac_snd_file\n", argv[0]);
- exit (-1);
- }
- else {
- fpIn = fopen(argv[1], "r");
- if (fpIn == NULL) {
- fprintf(stderr,"Error opening input file %s\n", argv[1]);
- exit(-1);
- }
- fread(&au_head,sizeof(au_hdrTYPE), 1, fpIn);
- if (au_head.magic != AU_MAGIC) {
- fprintf(stderr,"%s is not a valid audio file!\n", argv[1]);
- exit(-1);
- }
- fread(info,INFO_SIZE,1,fpIn);
- printf("%s %ld Hz %ld bytes: %s\n",argv[1], au_head.sample_rate,
- au_head.data_size, info);
- if (au_head.encoding != U_LAW) {
- fprintf(stderr,"Unknown data encoding!\n");
- exit(-1);
- }
- fpOut = fopen(argv[2],"w");
- if (fpOut == NULL) {
- fprintf(stderr,"Error opening output file: %s\n", argv[2]);
- exit(-1);
- }
- sound_bytes = (unsigned char *) malloc(au_head.data_size);
- fread(sound_bytes, au_head.data_size, 1, fpIn);
- for (whichByte = 0; whichByte < au_head.data_size; whichByte++) {
- sound_bytes[whichByte] = lut_au2snd[sound_bytes[whichByte]];
- }
- fwrite(sound_bytes, au_head.data_size, 1, fpOut);
- fclose(fpOut);
- fclose(fpIn);
- free(sound_bytes);
- exit(0);
- }
- }
-
-
-